跳到主要内容

Scrapy 学习

Scrapy 框架执行流程

Scrapy框架主要由六大组件组成,它们分别是 调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)、中间件(Middleware)、实体管道(Item Pipeline)和 Scrapy 引擎(Scrapy Engine)

image.png

1、Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

2、Scheduler(调度器): 它负责接受引擎发送过来的 Request 请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

3、Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有 Requests 请求,并将其获取到的Responses 交还给Scrapy Engine(引擎),由引擎交给 Spider 来处理,

4、Spider(爬虫): 它负责处理所有 Responses,从中分析提取数据,获取 Item 字段需要的数据,并将需要跟进的 URL 提交给引擎,再次进入Scheduler(调度器),

5、Item Pipeline(管道): Item Pipeline 负责处理被 spider 提取出来的 item。典型的处理有清理、 验证及持久化。

6、Downloader Middlewares(下载中间件): 可以自定义扩展下载功能的组件(代理、cokies 等)。

7、Spider Middlewares(Spider 中间件): 可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider 的 Responses;和从 Spider 出去的 Requests)

image.png

项目文件结构

spiders目录: 负责存放继承自 scrapy 的爬虫类。里面主要是用于分析 response 并提取返回的 item 或者是下一个 URL 信息,每个 Spider 负责处理特定的网站或一些网站。

__init__.py: 项目的初始化文件。

items.py: 负责数据模型的建立,类似于实体类。定义我们所要爬取的信息的相关属性。Item 对象是种容器,用来保存获取到的数据。

middlewares.py: 自己定义的中间件。可以定义相关的方法,用以处理爬虫的响应输入和请求输出。

(这个 pipelines 就是拿到处理的结果,可以将其保存)
pipelines.py: 负责对 spider 返回数据的处理。在 item 被 Spider 收集之后,就会将数据放入到 item pipelines中,在这个组件是一个独立的类,他们接收到item并通过它执行一些行为,同时也会决定 item 是否能留在 pipeline,或者被丢弃。

settings.py: 负责对整个爬虫的配置。提供了scrapy组件的方法,通过在此文件中的设置可以控制包括核心、插件、pipeline以及Spider组件。

scrapy.cfg: scrapy基础配置